package com.xp.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xp.entity.Menu;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 菜单数据访问层
 * 
 * @author xp
 * @since 2024-01-01
 */
@Mapper
public interface MenuMapper extends BaseMapper<Menu> {

    /**
     * 根据父级菜单ID查询子菜单列表
     * 
     * @param parentId 父级菜单ID
     * @return 子菜单列表
     */
    @Select("SELECT * FROM sys_menu WHERE parent_id = #{parentId} AND deleted = 0 ORDER BY sort ASC")
    List<Menu> selectByParentId(@Param("parentId") Long parentId);

    /**
     * 查询所有启用的菜单
     * 
     * @return 启用的菜单列表
     */
    @Select("SELECT * FROM sys_menu WHERE status = 1 AND deleted = 0 ORDER BY sort ASC")
    List<Menu> selectEnabledMenus();

    /**
     * 根据菜单类型查询菜单列表
     * 
     * @param type 菜单类型
     * @return 菜单列表
     */
    @Select("SELECT * FROM sys_menu WHERE type = #{type} AND deleted = 0 ORDER BY sort ASC")
    List<Menu> selectByType(@Param("type") Integer type);

    /**
     * 分页查询菜单列表
     * 
     * @param page 分页参数
     * @param name 菜单名称（模糊查询）
     * @param status 菜单状态
     * @return 分页结果
     */
    IPage<Menu> selectMenuPage(Page<Menu> page, @Param("name") String name, @Param("status") Integer status);
}